<?php
/**
 * @author		João Batista Neto
 * @package		rpo
 * @subpackage	ssh\auth
 * @category	ssh, state
 */
namespace rpo\ssh\auth;

use rpo\base\exception\InvalidArgumentException;
use rpo\base\Object;
use rpo\base\String;
use rpo\ssh\interfaces\ISSHAuthentication;

/**
 * Implementa uma autenticação utilizando nome de usuário e senha
 * @author		João Batista Neto
 * @final
 * @package		rpo
 * @subpackage	ssh\auth
 * @category	ssh, state, authentication
 */
final class SSHAuthenticatePassword extends Object implements ISSHAuthentication {
	/**
	 * @var string
	 */
	private $user;

	/**
	 * @var string
	 */
	private $pswd;

	/**
	 * Constroi o objeto de autenticação
	 * @param String $user
	 * @param String $pswd
	 */
	public function __construct( String $user , String $pswd ){
		$this->user = $user;
		$this->pswd = $pswd;
	}

	/**
	 * Efetua a autenticação
	 * @param resource $resource
	 * @throws InvalidArgumentException se o recurso não for válido
	 */
	public function authenticate( &$resource ){
		if ( is_resource( $resource ) ){
			return ssh2_auth_password( $resource , $this->user , $this->pswd );
		} else {
			throw new InvalidArgumentException( 'Recurso inválido.' );
		}

		return false;
	}

	/**
	 * Recupera o nome do usuário
	 * @return String
	 */
	public function getUser(){
		return $this->user;
	}
}